package com.opcode.costa.ui.splashscreen;

import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;

import com.opcode.costa.R;
import com.opcode.nebulamobil.base.activities.FragmentActivityBase;
import com.opcode.nebulamobil.base.components.TextViewBase;
import com.opcode.nebulamobil.base.fragments.ResponsiveFragmentBase;
import com.opcode.nebulamobil.information.ApplicationInfo;
import com.opcode.nebulamobil.information.dataforms.costadataforms.ConnectionStatus;
import com.opcode.nebulamobil.information.dataforms.costadataforms.SettingsDataForm;
import com.opcode.nebulamobil.information.responses.JSONResponse;
import com.opcode.nebulamobil.information.responses.costaresponses.ActivationResp;
import com.opcode.nebulamobil.utility.FileProcess;
import com.opcode.nebulamobil.utility.JsonConverter;
import com.opcode.nebulamobil.utility.STSFileManager;

/**
 * SplashActivity'nin ierisinde yer alan fragmenttir.
 * Açılış ekranında yapılması gereken lojik işlemler bu fragment içerisinde yapılır.
 * @author Okan ERDOĞAN
 *
 * 6 Agu 2014
 */
public class SplashFragment extends ResponsiveFragmentBase{

	//Referanslar
	private View vi;
	private ConnectionStatus status;
	private FileProcess fileProcess;
	private Intent intent;
	
	
	/**
	 * Bu metod içerisinde fragmentta kullanılacak olan nesneler oluşturuluyor.
	 */
	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
		this.vi = inflater.inflate(R.layout.splash_screen_fragment_layout, container,false);
		ApplicationInfo.setResponsiveFragmentBase(this);
		this.fileProcess = new FileProcess(Environment.getExternalStorageDirectory()+"//settings.txt");

		if(!this.checkSettingsFile()){
			Log.i("SplashFragment", "Settings dosyasında veri bulunamadı.");
		}
		
		
		//Splash ekranından sonra açılacak olan ekran için intent nesnesi oluşturuluyor.
		this.intent=new Intent(new Intent(getActivity(),LoginActivity.class));
		return this.vi;
	}
	
	 /**
	  * Bu metod kayıtlı bir setting datasının olup olmadığını kontrol eder.
	  * Eğer ip ve port bilgilerini ieren bu data mevcutsa, sharedperefernces'a bu bilgiyi kayıt eder.
	  * Eğer mevcut deÛilse log dosyasına gerekli bildirimi yapar.
	  * @return
	  */
	private boolean checkSettingsFile(){
		String settingsData=fileProcess.reader();
		STSFileManager.setFileOperator(fileProcess);

		if(settingsData!=""){
			SettingsDataForm settingsInfo=new SettingsDataForm();
			
			settingsData = settingsData.replaceAll("\\r|\\n", "");
			settingsInfo.setServerIp(settingsData.split(":")[0]);
			settingsInfo.setServerPort(Integer.parseInt(settingsData.split(":")[1]));

			((FragmentActivityBase)getActivity()).createSharedPreferencesManager("sharedpreferences",getActivity());
			((FragmentActivityBase)getActivity()).writeToSharedPreferences("settingsInfo", JsonConverter.toJsonString(settingsInfo));
			
			return true;
		}else{
			return false;
		}
	}
	
	
	
	/**
	 * Sunucudan bir response geldiği zaman bu metod tetiklenir.
	 * Bu fragmentin alabildiği response'lar ActivasionResp ve PersonalListResp'dir.
	 * PersonalListResp geldiği zaman LoginActivity aılır.
	 */
	@Override
	public void responseCame(String response) {
		
		JSONResponse responseObject=(JSONResponse) JsonConverter.fromJsonString(response, JSONResponse.class);

		if(responseObject.getType().equals("ActivationResp")){
			ActivationResp activasionResp=(ActivationResp) JsonConverter.fromJsonString(response, ActivationResp.class);
			if(activasionResp.isActResult()){
				Log.i("SplashFragment", "Aktivasyon onaylandı.Personel listesi alınıyor.");
				startActivity(intent);
			}else{
				Log.i("SplashFragment", "Aktivasyonunuz onaylanmadı.");
				//Log.i("SplashFragment", activasionResp.getActMessage());
			}
		}
	}
	
}
